package com.ruoyi.manage.mapper;

import java.util.List;
import java.util.Date;
import com.ruoyi.manage.domain.CrInterviewSlot;
import org.apache.ibatis.annotations.Param;

/**
 * 面试时间段Mapper接口
 */
public interface CrInterviewSlotMapper
{
    /**
     * 查询面试时间段
     */
    public CrInterviewSlot selectCrInterviewSlotBySlotId(Long slotId);

    /**
     * 查询面试时间段列表
     */
    public List<CrInterviewSlot> selectCrInterviewSlotList(CrInterviewSlot crInterviewSlot);

    /**
     * 根据社团ID查询面试时间段
     */
    public List<CrInterviewSlot> selectInterviewSlotsByClubId(Long clubId);

    /**
     * 根据招聘ID查询面试时间段
     */
    public List<CrInterviewSlot> selectInterviewSlotsByRecruitmentId(Long recruitmentId);

    /**
     * 查询可用的面试时间段（学生端预约使用）
     */
    public List<CrInterviewSlot> selectAvailableInterviewSlots(@Param("clubId") Long clubId, @Param("recruitmentId") Long recruitmentId);

    /**
     * 根据日期范围查询面试时间段
     */
    public List<CrInterviewSlot> selectInterviewSlotsByDateRange(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("clubId") Long clubId);

    /**
     * 检查时间段冲突
     */
    public List<CrInterviewSlot> checkTimeSlotConflict(@Param("clubId") Long clubId, @Param("interviewDate") Date interviewDate, 
                                                      @Param("startTime") String startTime, @Param("endTime") String endTime, 
                                                      @Param("excludeSlotId") Long excludeSlotId);

    /**
     * 统计面试时间段数量
     */
    public int countInterviewSlotsByClub(@Param("clubId") Long clubId);

    /**
     * 更新预约数量
     */
    public int updateBookedCount(@Param("slotId") Long slotId, @Param("increment") int increment);

    /**
     * 批量更新时间段状态
     */
    public int batchUpdateSlotStatus(@Param("slotIds") Long[] slotIds, @Param("status") String status);

    /**
     * 新增面试时间段
     */
    public int insertCrInterviewSlot(CrInterviewSlot crInterviewSlot);

    /**
     * 修改面试时间段
     */
    public int updateCrInterviewSlot(CrInterviewSlot crInterviewSlot);

    /**
     * 删除面试时间段
     */
    public int deleteCrInterviewSlotBySlotId(Long slotId);

    /**
     * 批量删除面试时间段
     */
    public int deleteCrInterviewSlotBySlotIds(Long[] slotIds);
}